package org.example.aienglishapp.config.login;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;

/**
 * Redis 配置类。
 *
 * 该类用于配置与 Redis 数据库交互所需的 Bean，特别是 {@link RedisTemplate}，
 * 它是 Spring Data Redis 提供的一个核心类，用于执行各种 Redis 操作。
 * 在这里，我们配置了 RedisTemplate 的序列化方式，确保键和值都使用字符串序列化器。
 *
 * @author xlj
 * @since 2024-10-1
 * @version 1.0
 */
@Configuration
public class RedisConfig {

    /**
     * 创建并配置 RedisTemplate Bean。
     *
     * 此方法返回一个 RedisTemplate 实例，并设置其连接工厂及序列化器。
     * 使用 {@link StringRedisSerializer} 对键和值进行序列化，保证数据以字符串格式存储在 Redis 中。
     *
     * @param factory Redis 连接工厂，用于创建与 Redis 数据库的连接
     * @return 配置好的 RedisTemplate 实例
     */
    @Bean
    public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, String> template = new RedisTemplate<>();
        template.setConnectionFactory(factory);
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(new StringRedisSerializer());

        // 序列化哈希类型中的键和值
        template.setHashKeySerializer(new StringRedisSerializer());
        template.setHashValueSerializer(new StringRedisSerializer());

        return template;
    }
}